package org.abacus.platform.database;

import org.abacus.platform.database.impl.DataSourceProvider;
import org.junit.Test;

public class DatabaseTest {
	Database database = Database.getInstance();
	{
		database.setDataSource(new DataSourceProvider());
	}

	@Test
	public void createTable_table_group() {
		Table arg0 = database.prepareTable();
		arg0.setTableName("table_group");
		Column column = database.prepareColumn();
		column.setColumnName("id");
		column.setDataType("bigint");
		column.setPrimaryKey(true);
		arg0.getColumns().add(column);

		column = database.prepareColumn();
		column.setColumnName("group_name");
		column.setDataType("varchar");
		column.setDataLength(255);
		arg0.getColumns().add(column);

		column = database.prepareColumn();
		column.setColumnName("parent_id");
		column.setDataType("bigint");
		arg0.getColumns().add(column);

		try {
			database.getDatabaseManager().create(arg0);
		} catch (DatabaseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	@Test
	public void createTable_data_provider() {
		Table arg0 = database.prepareTable();
		arg0.setTableName("data_provider");
		Column column = database.prepareColumn();
		column.setColumnName("id");
		column.setDataType("bigint");
		column.setPrimaryKey(true);
		arg0.getColumns().add(column);

		column = database.prepareColumn();
		column.setColumnName("column_name");
		column.setDataType("varchar");
		column.setDataLength(255);
		arg0.getColumns().add(column);

		column = database.prepareColumn();
		column.setColumnName("filter_column");
		column.setDataType("varchar");
		column.setDataLength(255);
		arg0.getColumns().add(column);

		column = database.prepareColumn();
		column.setColumnName("filter_column_value");
		column.setDataType("varchar");
		column.setDataLength(255);
		arg0.getColumns().add(column);

		column = database.prepareColumn();
		column.setDataType("varchar");
		column.setColumnName("primary_key_name");
		column.setDataLength(255);
		arg0.getColumns().add(column);

		column = database.prepareColumn();
		column.setDataType("varchar");
		column.setColumnName("table_name");
		column.setDataLength(255);
		arg0.getColumns().add(column);

		try {
			database.getDatabaseManager().create(arg0);
		} catch (DatabaseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	@Test
	public void createTableGroup() {
		TableGroup arg0 = database.prepareTableGroup();
		arg0.setGroupName("table_group");
		arg0.setId(1L);
		try {
			database.getDatabaseManager().create(arg0);
		} catch (DatabaseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	@Test
	public void dropTable() {
		Table arg0 = database.prepareTable();
		arg0.setTableName("table_group");
		try {
			database.getDatabaseManager().drop(arg0);
		} catch (DatabaseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	@Test
	public void rename() {
		Table arg0 = database.prepareTable();
		arg0.setTableName("w");
		try {
			database.getDatabaseManager().rename(arg0, "lcy");
		} catch (DatabaseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	@Test
	public void createColumn() {
		Table table = database.prepareTable();
		Column arg0 = database.prepareColumn();
		arg0.setTable(table);
		table.setTableName("lcy");
		arg0.setColumnName("lcy");
		arg0.setDataType("int");
		try {
			database.getDatabaseManager().create(arg0);
		} catch (DatabaseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	@Test
	public void alterColumn() {
		Table table = database.prepareTable();
		Column arg0 = database.prepareColumn();
		arg0.setTable(table);
		table.setTableName("lcy");
		arg0.setColumnName("lcy");
		arg0.setDataType("int");
		try {
			database.getDatabaseManager().alter(arg0);
		} catch (DatabaseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	@Test
	public void dropColumn() {
		Table table = database.prepareTable();
		Column arg0 = database.prepareColumn();
		arg0.setTable(table);
		table.setTableName("lcy");
		arg0.setColumnName("lcy");
		arg0.setDataType("int");
		try {
			database.getDatabaseManager().drop(arg0);
		} catch (DatabaseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}
